#include <iostream>
#include <string>
// 在new一个对象后，内存中保存的是对象的成员变量。所有类的对象共享一份成员函数
// static修饰的成员变量，该变量属于类，初始化在内外进行，且必须进行初始化，作用域属于类，且生命周期随着整个程序的结束而结束
class Stock{
private:
    long stockNum;   // 股票数
    std::string stockName;   // 名称
    double stockPrice;   //价格
    void printName(){std::cout<<stockName;}       // 在class内部定义好的函数，默认为inline类型
public:
// C++有默认的构造函数，带有默认值。所以自己定义的构造函数中的参数不应当全部都有默认值，否则编译器会报错
    Stock(long stockNum,std::string stockName,double stockPrice);    // 构造函数
    ~Stock();     // 析构函数，在对象被销毁前调用，每个类只有一个析构函数
    double sumPrice() const;    // 被const修饰的成员函数，不可以修改成员变量
};
// struct in C: allocate memory
// class in C++: allocate memory & invoke a constructor
// If there is a member variable of the pointer type, and it had been initialized in constructor function, so it must be destoried in destructor function
// static members are not bound to class instances.静态成员需要在类外初始化（c++17可以在类内使用inline修饰并初始化）
// static member function con't invoke an unstatic member function or virable, because unstatic members belong to class instance
// 静态函数无法调用非静态成员函数或修改非静态成员变量，因为非静态函数属于对象并且对象有可能还未创建